// JavaScript Document
/*function CArray(){}
CArray.constructor=CArray;
CArray.prototype=new Array()*/
//把数组再clone一份
Array.prototype.__$clone$__=function(){
    var ret=new Array();

    
    for(i=0,  len=this.length ; i<len ; i++){        
        ret[i]=this[i]
    }
    //console.log('ret->');
    //console.log(ret);
    //console.log('<-ret');
    return ret;    
}

//随机打乱数组
Array.prototype.__$shuffle$__=function(){
    //clone的一份数组
   /* var arr=new Array();
    for(i=0,  len=this.length ; i<len ; i++){        
        arr[i]=this[i]
    }*/
    var arr=this.__$clone$__()
    
    //要返回的数组     
    var retarr=new Array();         
    for($i=0 ,len=arr.length ;$i<len;$i++){ 
    //ele取出的一个数组元素，此数组的长度是1
        var ele=arr.splice(       
        Math.round(  Math.random()*( arr.length-1 - 0) + 0  )
         ,1  );     
        retarr[$i]=ele[0];
    }
    
    return retarr;
 
}

/*
splice() 方法向/从数组中添加/删除项目，然后返回被删除的项目。
注释：该方法会改变原始数组。
语法
arrayObject.splice(index,howmany,item1,.....,itemX)
参数	描述
index	必需。整数，规定添加/删除项目的位置，使用负数可从数组结尾处规定位置。
howmany	必需。要删除的项目数量。如果设置为 0，则不会删除项目。
item1, ..., itemX	可选。向数组添加的新项目。
返回值
类型	描述
Array	包含被删除项目的新数组，如果有的话。
说明
splice() 方法可删除从 index 处开始的零个或多个元素，并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
如果从 arrayObject 中删除了元素，则返回的是含有被删除的元素的数组。
技术细

节*/
Array.prototype.__$rdel$__=function(){
    if(this.length!==0){
     this.splice(       
        Math.round(  Math.random()*( this.length-1 - 0) + 0  )
         ,1  );    
    }
}

//从数组中随机选择一个元素 ，并将那个元素删除，如果没有元素则copy一个数组到数组中
Array.prototype.__$rselect$__=function(arr){
    
    if(this.length==0){
         for(var i=0,  len=arr.length ; i<len ; i++){        
           this[i]=arr[i]
		 }     
    }
	 var that=this;
    if(that.length!==0){
     return that.splice(       
        Math.round(  Math.random()*( that.length-1 - 0) + 0  )
         ,1  );    
    } 
}

Array.prototype.__$rselect2$__=function(arr){
    return    this[ Math.round(  Math.random()*( this.length-1 - 0) + 0  ) ];
}

Array.prototype.a=function(){
    
    console.log(this)
    console.log(this.length)
    }
    
    //打印一维数组
Array.prototype.__$printR1$__=function (){
    ret='Array( '
   for (i=0;i<this.length;i++){
       ret+='['+i+']=>'+ showobj(this[i])+',<br>'
    }
    ret+=' )';
    return ret;
}

function showobj(o){
	if(typeof o == 'object'){
	    return o.s +'|' + o.e +'|' + o.lyric;
		
	}	
}

Array.prototype.__$inArray$__=function(str){
    var ret = false;
    for(i=0,  len=this.length ; i<len ; i++){        
       if(str===this[i]){
		   return true;   
	   }
    }
	return ret;
    
}
//顺序选择 __$sequentialSelection$__
Array.prototype.__$sequSe$__=function( ){
   
    
	if(typeof this.curr ==='undefined'
	|| this.curr>this.length-1
	){
	    this.curr=0;	
	}
	 this.curr ++ ; 
	ret = this[this.curr];
	
	return ret;
    
}

//顺序选择 __$sequentialSelection$__
Array.prototype.__$sequSeUp$__=function( ){
   
    
	if(typeof this.curr ==='undefined'
	|| this.curr<=1
 
	){
	    this.curr=this.length;	
	}
	 this.curr -- ; 
	ret = this[this.curr];
	return ret;
    
}
Array.prototype.__$setCurrent$__=function( i ){
	
	this.curr = i ;
	
    if( this.curr<0
	|| this.curr>=this.length-1
	){
	    this.curr=0;	
	}
	  
	ret = this[this.curr];
	return ret;

}

//end